export class UiNode {
    constructor(private obj: UiObject) {

    }

    static create(obj: UiObject) {
        return new UiNode(obj)
    }
    /**
     * 滚动节点以使指定的集合位置在屏幕上可见的操作。
     * @param {int} row
     * @param {int} column
     */
    scrollTo(row: number, column: number) {
        return this.obj.scrollTo(row, column);
    }
    /**
     * 返回控件在父控件中的范围，其值是一个Rect对象。
     */
    bounds() {
        return this.obj.boundsInParent();
    }
    /**
    * 设置进度
    * @param value 进度值
    */
    setProgress(value: number) {
        return this.obj.setProgress(value);
    }
    /**
     * 设置文本
     * @param {string} text 设置的文本
     */
    setText(text: string) {
        return this.obj.setText(text);
    }
    /**
     * 返回该控件的所有子控件组成的控件集合
     */
    children() {
        const nodels: UiNode[] = [];
        this.obj.children().forEach((child) => {
            if (child == null)
                return;
            const c = new UiNode(child);
            nodels.push(c);
        });
        return nodels;
    }
    /**
     * 查找子集
     * @param index
     */
    child(index: number) {
        var nodel = this.obj.child(index);
        if (nodel == null)
            return null;
        return new UiNode(nodel);
    }
    /**
     * 查找节点父级
     */
    parent() {
        const nodel = this.obj.parent();
        if (nodel == null)
            return null;
        return new UiNode(nodel);
    }
    /**
     * 长按该控件，并返回是否点击成功。
     */
    longClick() {
        return this.obj.longClick()
    }
    /**
     * 点击并且按下坐标
     */
    ClickAndGesture() {
        if (this.obj.clickable()) {
            return this.obj.click();
        } else {
            const bounds = this.obj.bounds();
            const x = bounds.centerX();
            const y = bounds.centerY();
            return click(x, y);
        }
    }
    /**
     * 点击该控件，并返回是否点击成功。
     */
    click() {
        return this.obj.click()
    }
    /**
     * 获得控件的 text
     */
    get text() {
        return this.obj.text()
    }
    /**
     * 获得控件的 desc
     */
    get desc() {
        return this.obj.desc()
    }
    /**
     * 控件在父控件的位置
     */
    get indexInParent() {
        return this.obj.indexInParent()
    }
    /**获得控件的子集数量 */
    get childCount() {
        return this.obj.childCount()
    }
    /**
     * 返回控件在父控件中的绘制次序。该函数在安卓7.0及以上才有效，7.0以下版本调用会返回0。
     */
    get drawingOrder() {
        return this.obj.drawingOrder();
    }
    /**
     * 获取控件的id，如果一个控件没有id，则返回 ""
     */
    get id() {
        const id = this.obj.id();
        if (id == null)
            return "";
        return id;
    }
    /**
    * 返回控件的className(类名)
    */
    get className() {
        const className = this.obj.className();
        if (className == null)
            return "";
        return className;
    }
    /**
     * 返回控件所在的包名
     */
    get packageName() {
        const pkgName = this.obj.packageName();
        if (pkgName == null)
            return "";
        return pkgName;
    }
    /**
    * 返回控件的布局深度
    */
    get depth() {
        return this.obj.depth();
    }
    /**
     * 获取此节点是否为可访问性焦点。
     */
    get accessibilityFocus() {
        return this.obj.accessibilityFocus();
    }
    /**
     * 控件是否可勾选
     * @return 返回true 或 false
     */
    get checkable() {
        return this.obj.checkable();
    }
    /**
     * 控件是否可已勾选。
     * @return 返回true 或 false
     */
    get checked() {
        return this.obj.checked()
    }
    /**
     * 控件是否可以聚焦
     * @return 返回true 或 false
     */
    get focusable() {
        return this.obj.focusable();
    }
    /**
     * 控件是否已聚焦
     * @return 返回true 或 false
     */
    get focused() {
        return this.obj.focused()
    }
    /**
     * 控件对用户是否可见
     * @return 返回true 或 false
     */
    get visibleToUser() {
        return this.obj.visibleToUser();
    }
    get accessibilityFocused() {
        return this.obj.accessibilityFocused()
    }
    /**
    * 控件是否被选中
    * @return 返回true 或 false
    */
    get selected() {
        return this.obj.selected()
    }
    /**
     * 控件是否可点击.
     * @return 返回true 或 false
     */
    get clickable() {
        return this.obj.clickable()
    }
    /**
     * 控件是否可长按
     * @return 返回true 或 false
     */
    get longClickable() {
        return this.obj.longClickable()
    }
    /**
     * 控件是否已启用
     * @return 返回true 或 false
     */
    get enabled() {
        return this.obj.enabled()
    }
    /**
     * 控件是否是密码框
     * @return 返回true 或 false
     */
    get password() {
        return this.obj.password()
    }
    /**
    * 控件是否可滑动
    * @return 返回true 或 false
    */
    get scrollable(): boolean {
        return this.obj.scrollable()
    }
    /**
     * 返回 aj节点信息
     */
    getObj() {
        return this.obj;
    }
    /**
    * 回收节点
    */
    recycle() {
        return this.obj.recycle()
    }
}